HiveGrid 2.0 ist ein B2B-SaaS für Kontaktmanagement (CRM) und projektbasiertes Arbeiten – mit konsequent europäischem Datenschutz- und Hosting-Anspruch.
Kontakt, Projekt) statt generischer Entity-Builder.hivegrid.de ist ein separates Projekt auf einem anderen Host – nicht zu verwechseln.
HiveGrid Cloud ist kein klassischer Fork, sondern ein Git-Downstream des HiveGrid-Boilerplates: Verbesserungen aus dem Boilerplate werden per git merge upstream/main übernommen. Damit das funktioniert, bleiben Package-Namen und Konfiguration absichtlich kompatibel.
@hivegrid/*. Geteilte Boilerplate-Pakete behalten @hivegrid/* – sonst brechen Upstream-Merges. Entscheidung dokumentiert in docs/ARCHITECTURE-DECISIONS.md und AGENTS.md.
| Scope | Wofür | Beispiele |
|---|---|---|
@hivegrid/* | Alle vom Boilerplate geteilten Pakete (bleiben so, für Mergebarkeit) | @hivegrid/web, @hivegrid/api, @hivegrid/db, @hivegrid/foundation, @hivegrid/ui-app, … |
@hivegrid/* | Nur genuin neue HiveGrid-Pakete, die es upstream nie gibt | @hivegrid/activity (Activity-Stream-Service) |
Mapping-Hinweis: Wo ältere Docs/Pläne packages/ui-hivegrid oder @hivegrid/foundation sagen, ist real packages/ui-app bzw. @hivegrid/foundation gemeint. Ein späterer Naming-Drift-Fix ist in den ADRs als Option notiert, aber bewusst noch nicht umgesetzt.
Neu in HiveGrid: @hivegrid/activity – zentraler Activity-Stream/Änderungs-Historie, hängt nur an @hivegrid/db. Weitere HiveGrid-spezifische Pakete folgen demselben Muster.
Node-Version: HiveGrid nutzt v22.12.0 (.nvmrc) – neuer als der Boilerplate. Vor der Arbeit nvm use ausführen.
--max-warnings=0. Eine Warning bricht den Build.strict. any/Type-Escapes nur über eine gedeckelte Baseline.verify:*-Gates erzwingen die Regeln in Pre-Commit-Hooks und CI.ESLint mit @typescript-eslint, import, jsx-a11y, react-hooks (Basis plugin:jsx-a11y/recommended). Konfiguration identisch zum Boilerplate.
pnpm run lint = eslint --max-warnings=0 --ext .tsx,.ts . — Null Warnings. Es gibt keine „gelben" Builds.| Regel | Wirkung |
|---|---|
no-debugger | Kein debugger. |
no-console (Server) | In Server-Code (*.server.ts, apps/api, apps/worker, packages/*/src, Service-/DB-Layer) verboten; in UI/Tests/Skripten erlaubt. |
no-restricted-imports | Kein direkter @prisma/client (nur über @hivegrid/db); keine direkten src/*-Imports zwischen Packages; foundation/view-models ohne React/UI; UI-Packages ohne DB. |
no-restricted-syntax (Phase-C-UI) | Keine hartkodierten nutzersichtbaren Strings in ui-app/ui-subframe/ui-mock – alles über i18n-Keys. |
jsx-a11y-Regeln „monoton fallend": bei 0 Verstößen werden sie auf error hochgestuft und können nie wieder regredieren. Type-/Lint-Ausnahmen sind gedeckelt (verify:eslint-baseline): max. 262 eslint-disable, 35 @ts-ignore, 43 @ts-expect-error. Neue brauchen Baseline-Erhöhung + Review.
Datei-Limits: apps/api/src/app.ts ≤ 450 Zeilen, API-Route-Module ≤ 500 Zeilen (verify:source-health).
strict: true (inkl. noImplicitAny, strictNullChecks …). any praktisch verboten../+types/[routeName] (nie relativ). Fehlen Typen → pnpm run typecheck, nie den Importpfad „reparieren".| Einstellung | Wert | Einstellung | Wert |
|---|---|---|---|
| printWidth | 160 | semi | true |
| singleQuote | false (Double Quotes) | tabWidth | 2 (Spaces) |
| trailingComma | es5 | arrowParens | always |
| endOfLine | lf | Plugin | prettier-plugin-tailwindcss |
Vitest + Testing Library (jsdom), Coverage-Provider v8. Schwellen identisch zum Boilerplate und pro Verzeichnis erzwungen (verify:test-coverage gegen scripts/coverage-targets.json).
| Kritischer Pfad | Statements | Branches |
|---|---|---|
| API Auth | 99 % | 92 % |
| Billing | 99 % | 97 % |
| Tenant-Isolation | 99 % | 99 % |
| Session / Permissions | 99 % | 98 % |
| Legacy-Provider | 95 % | 90 % |
| Basis-Targets (z. B. apps/api) | 70 % | 60 % |
Test-Dichte-Gate (Pre-Commit): Mindestverhältnis Tests/Quelldateien je Workspace (z. B. apps/api ≥ 0,18; App-Routes ≥ 0,05; packages/brand/config ≥ 0,50). Neue HiveGrid-Pakete (z. B. @hivegrid/activity) brauchen eigene Tests.
Konventionen: *.test.ts(x) / *.spec.ts; Boundary *boundary.test.ts; a11y *.a11y.test.tsx / *.axe.test.tsx.
Verzeichnis tests/e2e (~39 Specs). Chromium, optional Mobile-Matrix (Pixel 5 + iPhone 13). Seriell, Timeout 120 s, Traces bei Fehlern. E2E laufen nächtlich gegen die Live-Staging-Umgebung; Basis ist ein deterministischer Readiness-Tenant (seed:e2e-readiness).
verify:a11y-coverage verlangt ≥ 12 Component-a11y-Tests und ≥ 7 E2E-a11y-Specs und prüft wörtliche Snippets kritischer Flows (z. B. expectNoCriticalA11yViolations(, expectNoHorizontalOverflow().
verify:a11y-coverage erneut laufen lassen.Form-POST-Interceptoren müssen das .data-Ziel matchen und turbo-stream zurückgeben (kein rohes JSON), inkl. X-Remix-Response: yes. Helfer in tests/e2e/utils/navigation.ts.
Pflicht-Flows (Auszug): Registration/Onboarding, Golden-Path, Subscription-Smoke, Plugin-Settings/-Lifecycle, Workflow-Builder+Run, Members, Audit, Profile-Security, Privacy, API-Keys, Mobile-Shell.
jsx-a11y-Lint · verify:color-contrast (WCAG 2.2 AA) · axe-core-Suite (test:a11y) · Mobile-Overflow-/Violation-Checks in E2E · Lighthouse-a11y als Warnung.
lint-staged (ESLint auf geänderten Dateien) · verify-secrets · verify-eslint-baseline · verify-test-density.
typecheck · verify-hardcoded-strings (i18n). Notfall-Bypass nur mit LEFTHOOK=0, nie auf main.
Jobs quality + api + worker + database + docker-smoke müssen grün sein (Typecheck, Lint, Tests, Build, Bundle-Size, a11y, ~18+ Baseline-Gates).
Preflight-Gates (deploy-readiness, docker-baseline, docker-non-root). Produktions-Promote erfordert backup_confirmed=true.
Zwei parallele Welten mit gleichen Gates: GitHub Actions und Gitea (self-hosted Runner). Eigene Gates sichern die Parität. ci.yml-Jobs: quality, api, worker, database, docker-smoke.
Die ~80 verify:*-Gates sind Baseline-/Anti-Regressions-Gates. Gruppen: Security/Auth · Mandantentrennung/Boundaries · Docker/Deploy · i18n/a11y · API/Specs · CI-Struktur · Docs.
HiveGrid Cloud läuft im gemeinsamen Hetzner-Estate (EU/Deutschland), zentral über Coolify gesteuert. Detail-Inventar im separaten Dokument „Server-Struktur". Das Wesentliche:
control-VM (Dashboard saas-ctrl.com) steuert alle Hosts per SSH.staging-1 trägt mehrere Produkt-Stagings nebeneinander – nicht eine VM pro Produkt.node1): Sentry (Errors), Loki (Logs), Meilisearch (Suche, per-Produkt-Scoped-Key), ClamAV (Virenscan), mCaptcha; Prometheus + Grafana auf control.git merge upstream/main sauber bleibt. Neues HiveGrid-Verhalten in @hivegrid/*-Paketen oder klar abgegrenzten Modulen.src/*. Server-DB nur über @hivegrid/db/client.server, Env über @hivegrid/config, Queues über @hivegrid/queue.href(), appPath/adminPath/apiPath), keine handgebauten Pfade.@hivegrid/config / Server-Boundaries. Tenant-Filter bei jedem Datenzugriff erhalten../+types/...; <Outlet/> in Layouts; typecheck nach Routen-Änderungen.docs/feature-manifests/*.json; bei mutierenden Routen docs/security/csrf-inventory.md; bei Rollen/Permissions docs/roles-matrix.md. HiveGrid-Fortschritt in docs/PROGRESS-TRACKER.md, Entscheidungen in docs/ARCHITECTURE-DECISIONS.md.nvm use (Node v22.12.0), dann pnpm install – installiert die Hooks automatisch.AGENTS.md + docs/ARCHITECTURE-DECISIONS.md lesen (Package-Modell, EU-Stack, Milestone-Struktur).pnpm run dev starten – generiert die RR7-Routen-Typen.pnpm run typecheck & pnpm run lint sauber (0 Warnings); vor Push pnpm test grün.seed:e2e-readiness, .env.e2e-readiness sourcen, dann verify:a11y-coverage + Playwright.Goldene Regel: Wenn ein Gate rot ist, ist die Lösung der Code – nicht das Umgehen des Gates.
Stand 14. Juni 2026. Quellen: HiveGrid-Cloud package.json, .eslintrc, .prettierrc, tsconfig.json, vitest.config.ts, playwright.config.ts, lefthook.yml, scripts/coverage-targets.json, AGENTS.md, docs/ARCHITECTURE-DECISIONS.md sowie das infra-Repository. Konfiguration ist – bis auf Node-Version und HiveGrid-spezifische Pakete/Docs – identisch zum HiveGrid-Boilerplate.